<?php

namespace app\middleware;

use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
use app\model\MemberModel;

/**
 * 验证admin 的 header token
 */
class ClientTokenRequest implements MiddlewareInterface
{
    protected $auth = [
        '/v1/biz-goods/buy',
        '/v1/biz-goods/recentOrders',
        '/v1/biz-goods/getOrderList',
        '/v1/biz/pay-qrcode-record',
        '/v1/biz/get-admins',
        '/v1/biz/add-admin',
        '/v1/biz/remove-admin',
        '/v1/biz/get-current-admin-info',
        '/v1/user/bindPhone',
        '/v1/user/changePhone',
        '/v1/user/profile',
        '/v1/user/update-profile',
        '/v1/user/generate-qrcode-record',
        '/v1/user/is-set-pay-password',
        '/v1/user/set-un-input-pay-password',
        '/v1/address/index',
        '/v1/address/detail',
        '/v1/address/add',
        '/v1/address/update',
        '/v1/address/delete',
        '/v1/address/setDefault',
        '/v1/card/index',// 我的富利卡
        '/v1/card/bind', // 绑定卡片
        '/v1/card/detail', // 卡片详情
        '/v1/card/getValidCards', // 获取有效卡片
        '/v1/card/topics', // 获取话题列表
        '/v1/card/buy-topic', // 购买主题卡
        '/v1/card/topic-order-status', // 查询主题卡订单状态
        '/v1/card/transfer-card', // 转赠卡片
        '/v1/card/logs', // 获取积分日志
        '/v1/biz-pay/balance', // 获取云豆余额
        '/v1/biz-pay/create', // 创建云豆支付
        '/v1/biz-pay/status', // 查询支付状态
        '/v1/biz-pay/records', // 获取支付记录列表
        '/v1/biz-pay/pay-remain', // 补差价
        '/v1/biz-pay/detail', // 补差价
        '/v1/biz-pay/do-hide', // 隐藏支付记录
        '/v1/biz-pay/start-pay-from-biz', // 从商家发起支付
        '/v1/biz-pay/records-by-biz', // 获取商家支付记录
        '/v1/biz-pay/refund-by-biz', // 商家发起退款
        '/v1/biz-goods-order/get-order-list-by-biz', // 获取商家消费订单列表
        '/v1/biz-goods-ticket/get-ticket-list-by-biz', // 获取商家核销码列表
        '/v1/vip/status', // 获取VIP状态
        '/v1/vip/createOrder', // 创建VIP订单
        '/v1/vip/payOrder', // 支付VIP订单

        '/v1/ping/submit', // 提交点评
        '/v1/note/submit', // 提交合作意向

        '/v1/user/manage-bizs', // 获取我管理的商家
        '/v1/user/setPayPassword', // 设置支付密码
        '/v1/user/sendCode', // 发送验证码
        '/v1/user/changePassword', // 修改密码
        '/v1/user/update-phone', // 修改手机号
        '/v1/user/update-avatar', // 修改头像
        '/v1/user/balance',
        '/v1/biz-goods-order/checkTicket', // 检查核销码
        '/v1/biz-goods-ticket/useTicket', // 使用核销码
        '/v1/biz-goods-order/refundTicket', // 退款
        '/v1/biz-goods-order/complaint', // 投诉
        '/v1/biz-goods-order/do-hide', // 隐藏订单

        '/v1/score-charge/balance', // 获取云豆余额
        '/v1/score-charge/create', // 创建云豆支付
        '/v1/score-charge/status', // 查询支付状态
        '/v1/score-charge/records', // 获取支付记录列表

        '/v1/bill/index', // 获取结算单列表
        '/v1/bill/detail', // 获取结算单详情
        '/v1/bill/confirm', // 确认账单无误

        '/v1/company/is-master', // 判断我是否是公司管理员
        '/v1/company/member-list', // 获取公司员工列表
        '/v1/company/remove-member', // 移除公司员工
        '/v1/company/add-member', // 添加公司员工
        '/v1/company/get-my-company-info', // 获取我管理的公司的基本信息
        '/v1/company/get-company-cards', // 获取公司卡片列表
        '/v1/company/get-card-user-list', // 获取卡片激活记录明细

        '/v1/goods/buy', // 购买商品
        '/v1/goods/get-pay-info', // 获得订单支付信息
        '/v1/goods/query-pay-status', // 查询订单支付状态
        '/v1/goods/create-pay', // 获取订单列表

        '/v1/order/get-order-list', // 获取订单列表
        '/v1/order/check-can-pay', // 检查是否可以进行支付
        '/v1/order/one', // 订单详情
        '/v1/order/refund', // 订单退款
        '/v1/order/do-hide', // 隐藏订单
        '/v1/order/update-express-no', // 更新订单快递单号
        '/v1/cart/add', // 添加到购物车
        '/v1/cart/list', // 获取购物车列表
        '/v1/cart/submit', // 提交购物车
    ];

    public function process(Request $request, callable $handler): Response
    {
        $path = $request->path();

        if (in_array($path, $this->auth) == true) {

            $authorization = $request->header('Authorization');
            // 验证token
            if (!empty($authorization)) {
                $data = explode(' ', $authorization);
                $user = MemberModel::where('access_token', '=', $data[1])->first();
                if (empty($user)) {
                    return json(['code' => 1002, 'msg' => '请求权限不足']);
                }
                $request->userLogin = $user;
            } else {
                return json(['code' => 1002, 'msg' => '请求权限不足']);
            }
        }
        return $handler($request);
    }
}
